// 头文件，宏定义，结构体
#ifndef HEAD_H
#define HEAD_H
// 标准库头文件
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
// 系统调用和POSIX接口
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/mman.h>
#include <sys/select.h>
#include <time.h>
#include <sys/wait.h>
#include <dirent.h>
#include <syslog.h>
#include <sys/shm.h>
#include <sys/ipc.h>
#include <signal.h>
#include <sys/time.h>
// 线程库
#include <pthread.h>
// 网络编程
#include <arpa/inet.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <sys/epoll.h>
#include <sys/sendfile.h>
// 定义日志级别（与系统一致）
#define LOG_LEVEL LOG_INFO // 默认日志级别
// 自定义宏定义

#define ARGS_CHECK(argc, num)                 \
    {                                         \
        if (argc != num)                      \
        {                                     \
            fprintf(stderr, "ARGS ERROR!\n"); \
            return -1;                        \
        }                                     \
    }
#define ERROR_CHECK(ret, num, msg) \
    {                              \
        if (ret == num)            \
        {                          \
            perror(msg);           \
            return -1;             \
        }                          \
    }

#define THREAD_ERROR_CHECK(ret, func)                        \
    {                                                        \
        if (ret != 0)                                        \
        {                                                    \
            fprintf(stderr, "%s:%s\n", func, strerror(ret)); \
        }                                                    \
    }
// 结构体定义
typedef enum
{
    CMD_TYPE_PWD = 1,
    CMD_TYPE_LS,
    CMD_TYPE_CD,
    CMD_TYPE_MKDIR,
    CMD_TYPE_RMDIR,
    CMD_TYPE_PUTS,
    CMD_TYPE_GETS,
    CMD_TYPE_NOTCMD // 不是命令
} CmdType;
typedef struct
{
    int len; // 记录内容长度
    CmdType type;
    char buff[1000]; // 记录内容本身
} train_t;
// 定义Config结构体
typedef struct
{
    char ip[16];             // 存放IP地址
    int port;                // 存放端口号
    char mysql_user[32];     // 存放MySQL用户名
    char mysql_password[32]; // 存放MySQL密码
    int log_level;           // 存放日志级别----可新增日志路径+文件路径+MD5路径

} Config;

#endif
